const db = require('../config/db');
const bcrypt = require('bcryptjs')
// 生成token中间件
const jwt = require('jsonwebtoken');
const { jwtSecretKey } = require('../config/jwtSecretKey');

// 注册接口
exports.registerController = (req, res) => {
  // 接收表单数据
  const userinfo = req.body
  let data = JSON.stringify(userinfo)
  data = JSON.parse(data)
  // 判断用户名密码是否为空
  if (!data.name || !data.pwd) {
    return res.send({ status: 1, message: '用户名或者密码不能为空' });
  }
  // 定义sql语句查询用户名是否被占用
  const sql = 'select * from user where name=?'
  // 定义sql语句插入数据
  const sql2 = 'insert into user set ?'
  db.query(sql, data.name, (err, results) => {
    if (err) return res.send(err.message)
    // 判断用户名是否被占用
    if (results.length > 0) {
      return res.send({ message: '用户名已被占用！' })
    }

    // 调用bcrypt.hashSync()对密码进行加密
    data.pwd = bcrypt.hashSync(data.pwd, 10)
    db.query(sql2, { name: data.name, pwd: data.pwd, head_img: 'https://img0.baidu.com/it/u=472150058,2984806882&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400' }, (err, results) => {
      if (err) return res.send(err.message)
      // 判断影响行数是否为1行
      if (results.affectedRows !== 1) return res.send('注册失败')
      // 注册成功
      res.send({
        status: 200,
        message: '注册成功！'
      })

    })
  });
}

// 登录接口
exports.loginController = (req, res) => {
  const userinfo = req.body
  let data = JSON.stringify(userinfo)
  data = JSON.parse(data)
  const { name, pwd } = data;
  const sql = 'select * from user where name=?';
  db.query(sql, name, (err, results) => {
    if (err) return res.send(err.message)
    if (results.length === 0) {
      return res.send({ status: 1, message: '用户不存在' });
    }
    // 解密数据库中的密码并判断是否相等返回布尔值
    const compareState = bcrypt.compareSync(pwd, results[0].pwd);
    if (!compareState) {
      return res.send({ status: 1, message: '密码错误' });
    }
    // jwt生成
    const user = { ...results[0], pwd: '' };
    const token = jwt.sign(user, jwtSecretKey, { expiresIn: '24h', });
    res.send({ status: 200, message: '登录成功', token: 'Bearer ' + token });
  });
};

// 获取用户数据
exports.userInfoController = (req, res) => {
  // 获取用户token解析
  const token = req.headers.authorization;
  const userInfo = jwt.verify(token.split('Bearer ')[1], jwtSecretKey);
  res.send({
    status: 200,
    data: {
      name: userInfo.name,
      head_img: userInfo.head_img,
    },
  });
};
